<?php

//error_reporting(E_ALL);
//ini_set('display_errors','On');

use Doctrine\Common\Collections\ArrayCollection;

class Usuarios_ClienteController extends Zend_Controller_Action {

    private $referenciaDao;
    private $adjuntosDao;
    private $fullPath;
    private $pathUpload;
    private $informeDao;
    private $personaDao;

    public function init() {

        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            $usuarioDao = new Doctrine_Model_UsuariosDoctrineDao();
            $this->view->usuario = $usuarioDao->obtenerPorId($auth->getIdentity()->id);
        } else {
            $this->_helper->redirector('index', 'login', 'admin');
        }

        /* Colores */
        $colores = array(
            '5b92d6' => array('5b92d6', '8fbaef'), //azul
            'd6d65b' => array('d6d65b', 'bfbf3f'), //amarillo
            '51ad56' => array('51ad56', '73be78'), //verde
            'db6f70' => array('db6f70', 'e59899'), //rojo
            '5e71a0' => array('5e71a0', '8e9cbc'), //azul oscuro
            'd68e5b' => array('d68e5b', 'e8a97c'), //naranja
            '92989f' => array('92989f', 'bbbec3')); //gris
        $this->view->colorSucursal = $colores[$this->view->usuario->getSucursal()->getColor()];
        /* Colores */

        $this->fullPath = $_SERVER["DOCUMENT_ROOT"];
        $this->pathUpload = 'adjuntos/';

        $this->creditoDao = new Doctrine_Model_CreditoDao();
        $this->personaDao = new Doctrine_Model_PersonaDao();
        $this->referenciaDao = new Doctrine_Model_Referencias();
        $this->personaDao = new Doctrine_Model_PersonaDao();
        $this->adjuntosDao = new Doctrine_Model_AdjuntoDoctrineDao();
        $this->informeDao = new Doctrine_Model_InformeDoctrineDao();
        $this->_session = new Zend_Session_Namespace('tema');
        $this->_flashMessenger = $this->_helper->getHelper('Mensaje');
        if ($this->_session->tema) {
            $this->view->logo = 'logoVerde.jpg';
            $this->view->colorFondo = '#4D9473';
            $this->view->colorFuente = '#FFF';
            $this->view->colorFuenteContenido = '#000';
            $this->view->colorContenido = '#C6DC94';
            $this->view->colorMenu = 'navbar-inverse';
            $this->view->colorFondoMenuLateral = '#4D9473l';
        } else {
            $this->view->logo = 'logoBlanco.jpg';
        }
        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/jquery.maskedinput-1.3.min.js');
        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/cliente_registrar.js');

        $this->view->titulo = "Gesti&oacute;n de Personas";
    }

    public function indexAction() {
        $this->_helper->redirector('usuarios', 'cliente', 'registrar');
    }

    public function registrarAction() {

        $this->view->estadosCiviles = $this->referenciaDao->obternerEstadosCiviles();
        $this->view->tiposDeDocumentos = $this->referenciaDao->obternerTipoDocumento();
        $this->view->nacionalidades = $this->referenciaDao->obternerNacionalidades();
        $this->view->localidades = $this->referenciaDao->obternerLocalidades();
        $this->view->publicidades = $this->referenciaDao->obternerPublicidades();
        $this->view->tiposDeTelefonos = $this->referenciaDao->obternerTiposDeTelefonos();
        $this->view->tiposLaborales = $this->referenciaDao->obternerTiposLaborales();
        $this->view->tiposAdjuntos = $this->referenciaDao->obternerTiposAdjuntos();
        $this->view->tiposInformes = $this->referenciaDao->obternerTiposInformesVisibles();
        $this->view->calificaciones = $this->referenciaDao->obtenerCalificaciones();
        $this->view->desde_credito = $this->getRequest()->getParam('desde_credito', null);
        $this->view->mostrarOtrosTabs = false;
        $this->view->credito_a_renovar_id = $this->getRequest()->getParam('credito_a_renovar_id', null);


        $session = new Zend_Session_Namespace("session");
        $this->view->session = $session;
        //si viene de apretar el boton del menu, borro de la session el cliente_id
        if ($this->getRequest()->getParam('inicio', 0) == 1) {
            unset($session->cliente_id);
        }
        if ($this->getRequest()->isPost()) {

            $datos = $this->getRequest()->getParams();

            if (!$this->personaDao->existeClienteConDocumento($datos['nro_documento'])) {

                $cliente = new Doctrine_Model_Entities_Persona();
                $cliente = $this->cargarDatosCliente($cliente, $datos);

                $this->view->informes = array();

                $direcionCliente = new Doctrine_Model_Entities_Direccion();
                $direcionCliente->setDireccion($datos['direccion']);
                $direcionCliente->setNumero($datos['direccion_nro']);
                $direcionCliente->setCodigoPostal($datos['codigo_postal']);
                $direcionCliente->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_id']));
                $cliente->setDireccion($direcionCliente);

                $numerosDeTelefonos = $datos['telefono_personal'];
                $tiposDeTelefonos = $datos['tipo_telefono_personal'];
                foreach ($numerosDeTelefonos as $key => $value) {
                    $telefono = new Doctrine_Model_Entities_Telefono();
                    $tipoTelefono = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoTelefono', $tiposDeTelefonos[$key]);
                    $telefono->setNumero($value);
                    $telefono->setTipoTelefono($tipoTelefono);
                    $cliente->agregarTelefono($telefono);
                }

                if (!empty($datos['legajo_1'])) {
                    $datosLaboral = new Doctrine_Model_Entities_DatosLaboral();
                    $datosLaboral->setLegajo($datos['legajo_1']);
                    $datosLaboral->setEmpresa($datos['empresa_1']);
                    $datosLaboral->setCargo($datos['cargo_1']);
                    $datosLaboral->setLugarDeTrabajo($datos['lugar_trabajo_1']);
                    $datosLaboral->setTipoLaboral($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoLaboral', $datos['tipo_laboral_id_1']));
                    $datosLaboral->setObservacion($datos['observacion_laboral_1']);
                    $datosLaboral->setFechaIngreso(Doctrine_Model_Utilidad::formatoFechaBD($datos['fecha_ingreso_1']));

                    $direcionLaboral = new Doctrine_Model_Entities_Direccion();
                    $direcionLaboral->setDireccion($datos['direccion_laboral_1']);
                    $direcionLaboral->setNumero($datos['direccion_nro_1']);
                    $direcionLaboral->setCodigoPostal($datos['codigo_postal_laboral_1']);
                    $direcionLaboral->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_laboral_1']));
                    $datosLaboral->setDireccion($direcionLaboral);

                    if (!empty($datos['lugar_trabajo_1'])) {

                        $direcionLugarDeTrabajo = new Doctrine_Model_Entities_Direccion();
                        $direcionLugarDeTrabajo->setDireccion($datos['direccion_lugar_trabajo_laboral_1']);
                        $direcionLugarDeTrabajo->setNumero($datos['numero_lugar_trabajo_1']);
                        $direcionLugarDeTrabajo->setCodigoPostal($datos['codigo_postal_lugar_trabajo_laboral_1']);
                        $direcionLugarDeTrabajo->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_lugar_trabajo_laboral_1']));
                        $datosLaboral->setDireccionLugarDeTrabajo($direcionLugarDeTrabajo);
                    }

                    ///TELEFONOS LABORAL 1

                    $numerosDeTelefonosLaboral = $datos['telefono_cliente_laboral_1'];
                    $tiposDeTelefonosLaboral = $datos['tipo_telefono_cliente_laboral_1'];
                    foreach ($numerosDeTelefonosLaboral as $key => $value) {
                        $telefono = new Doctrine_Model_Entities_TelefonoLaboral();
                        $tipoTelefono = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoTelefono', $tiposDeTelefonosLaboral[$key]);
                        $telefono->setNumero($value);
                        $telefono->setTipoTelefono($tipoTelefono);
                        $datosLaboral->agregarTelefono($telefono);
                    }

                    $cliente->agregarDatosLaborales($datosLaboral);
                }

                if (!empty($datos['legajo_2'])) {
                    $datosLaboral = new Doctrine_Model_Entities_DatosLaboral();
                    $datosLaboral->setLegajo($datos['legajo_2']);
                    $datosLaboral->setCargo($datos['cargo_2']);
                    $datosLaboral->setEmpresa($datos['empresa_2']);
                    $datosLaboral->setLugarDeTrabajo($datos['lugar_trabajo_2']);
                    $datosLaboral->setObservacion($datos['observacion_laboral_2']);
                    $datosLaboral->setTipoLaboral($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoLaboral', $datos['tipo_laboral_id_2']));
                    $datosLaboral->setFechaIngreso(Doctrine_Model_Utilidad::formatoFechaBD($datos['fecha_ingreso_2']));

                    $direcionLaboral = new Doctrine_Model_Entities_Direccion();
                    $direcionLaboral->setDireccion($datos['direccion_laboral_2']);
                    $direcionLaboral->setNumero($datos['direccion_nro_2']);
                    $direcionLaboral->setCodigoPostal($datos['codigo_postal_laboral_2']);
                    $direcionLaboral->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_id_laboral_2']));
                    $datosLaboral->setDireccion($direcionLaboral);

                    if (!empty($datos['lugar_trabajo_2'])) {

                        $direcionLugarDeTrabajo = new Doctrine_Model_Entities_Direccion();
                        $direcionLugarDeTrabajo->setDireccion($datos['direccion_lugar_trabajo_laboral_2']);
                        $direcionLugarDeTrabajo->setNumero($datos['numero_lugar_trabajo_laboral_2']);
                        $direcionLugarDeTrabajo->setCodigoPostal($datos['codigo_postal_lugar_trabajo_laboral_2']);
                        $direcionLugarDeTrabajo->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_lugar_trabajo_laboral_2']));
                        $datosLaboral->setDireccionLugarDeTrabajo($direcionLugarDeTrabajo);
                    }

                    $cliente->agregarDatosLaborales($datosLaboral);
                }

                $estadoActivo = Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_Estado', 1);
                $cliente->setEstado($estadoActivo);

                /* carga de adjuntos */
                $upload = new Zend_File_Transfer_Adapter_Http();
                $upload->setDestination(realpath(APPLICATION_PATH . '/../public/adjuntos'));

                $upload->addValidators(array('FilesSize' => '4MB'));

                $tipo_adjuntos = $this->getRequest()->getParam("tipo_adjunto");

                $i = 0;
                foreach ($upload->getFileInfo() as $file => $info) {
                    if ($upload->isValid($file)) {
                        $upload->setDestination(realpath(APPLICATION_PATH . '/../public/adjuntos'));

                        $adjunto = new Doctrine_Model_Entities_Adjunto();
                        $adjunto->setPersona($cliente);
                        $adjunto->setFecha(new DateTime());

                        $ext = $this->_findexts($info['name']);
                        $fileName = 'file' . $i . time() . '.' . $ext;

                        try {

                            // $upload->addFilter('Rename', array('target' => $dirUpload . $fileName));
                            $upload->addFilter(new Zend_Filter_File_Rename(array('target' => $fileName, 'overwrite' => true)), null, $file);
                            $adjunto->setPath($fileName);


                            $adjunto->setTipoAdjunto($this->referenciaDao->obtenerPorId("Doctrine_Model_Entities_TipoAdjunto", $tipo_adjuntos[$i]));

                            $cliente->agregarAdjunto($adjunto);

                            if (!$upload->receive($file)) {
                                echo "probleas";
                                exit;
                            }
                        } catch (Exception $e) {
                            $logger = Zend_Registry::get('logger');
                            echo("Error Codigo: " . $e->getMessage() );
                            exit;
                        }
                    } else {
                        //var_dump($upload->getMessages());
                    }
                    $i++;
                }
                /* fin carga de adjuntos */

                if ($this->personaDao->guardar($cliente)) {
                    $ok = true;
                    /* informes cliente */
                    if (count($datos["comentario"]) > 0) {
                        $cont = 0;
                        $ok = false;
                        $params = array();
                        foreach ($datos["comentario"] as $comentario) {
                            $informe = new Doctrine_Model_Entities_Informe();
                            $informe->setComentario($comentario);
                            $informe->setFecha(new DateTime($datos['fecha_carga_informe'][$cont]));

                            $tipoInforme = $this->referenciaDao->obtenerPorId("Doctrine_Model_Entities_TipoInforme", $datos["tipo_informe_id"][$cont]);
                            $informe->setTipoInforme($tipoInforme);
                            $informe->setPersona($cliente);

                            if ($this->informeDao->guardar($informe)) {
                                $ok = true;
                            } else {
                                $this->view->mensajeError = 'Hubo un problema al intentar Registrar El informe.';
                                $ok = false;
                                continue;
                            }
                            $cont++;
                        }
                    } else {
                        $mensaje = 'Se ha Registrado Correctamente';
                        if (isset($session->cliente_id)) {
                            $parametro = 'garante_id';
                        } else {
                            $parametro = 'cliente_id';
                        }
                        $params = array('mensaje' => $mensaje, $parametro => $cliente->getId());
                        $this->_helper->redirector('registrar', 'credito', 'usuarios', $params);
                    }
                    if ($ok) {
                        $mensaje = 'Se ha Registrado Correctamente';
                        $params = array('mensaje' => $mensaje, 'cliente_id' => $cliente->getId());
                        $this->_helper->redirector('registrar', 'credito', 'usuarios', $params);
                    }
                } else {
                    $this->view->mensajeError = 'Hubo un problema al intentar Registrar a la Persona';
                }

                $this->view->adjuntos = $cliente->getAdjuntos();
                $this->view->tituloTipoAdjunto = "Todos";

                $this->view->clienteArray = $cliente->toArray();
            } else {
                $this->view->mensajeError = 'Ya existe un cliente con numero de documento ' . $datos['nro_documento'] . ' en el sistema';
            }
        } else {
            if ($this->getRequest()->getParam("error", false)) {
                $this->view->mensajeError = $this->getRequest()->getParam("mensaje");
            } else {
                $this->view->mensaje = $this->getRequest()->getParam("mensaje");
            }
        }
    }

    public function modificarAction() {

        $session = new Zend_Session_Namespace("session");
        $this->view->session = $session;

        $this->view->estadosCiviles = $this->referenciaDao->obternerEstadosCiviles();
        $this->view->tiposDeDocumentos = $this->referenciaDao->obternerTipoDocumento();
        $this->view->nacionalidades = $this->referenciaDao->obternerNacionalidades();
        $this->view->localidades = $this->referenciaDao->obternerLocalidades();
        $this->view->publicidades = $this->referenciaDao->obternerPublicidades();
        $this->view->tiposDeTelefonos = $this->referenciaDao->obternerTiposDeTelefonos();
        $this->view->tiposLaborales = $this->referenciaDao->obternerTiposLaborales();
        $this->view->tiposAdjuntos = $this->referenciaDao->obternerTiposAdjuntos();
        $this->view->tiposInformes = $this->referenciaDao->obternerTiposInformesVisibles();
        $this->view->calificaciones = $this->referenciaDao->obtenerCalificaciones();
        $this->view->mostrarOtrosTabs = true;

        $datos = $this->getRequest()->getParams();
        $this->view->formAction = $this->view->baseUrl() . '/usuarios/cliente/modificar';

        if ($this->getRequest()->isPost()) {
            if (!empty($datos['cliente_id'])) {

                $cliente = new Doctrine_Model_Entities_Persona();
                $cliente = $this->personaDao->obtenerPorId($datos['cliente_id']);
                $cliente = $this->cargarDatosCliente($cliente, $datos);

                /* carga de adjuntos */
                $upload = new Zend_File_Transfer_Adapter_Http();
                $upload->setDestination(realpath(APPLICATION_PATH . '/../public/adjuntos'));

                $upload->addValidators(array('FilesSize' => '4MB'));

                $tipo_adjuntos = $this->getRequest()->getParam("tipo_adjunto");

                $i = 0;
                foreach ($upload->getFileInfo() as $file => $info) {
                    if ($upload->isValid($file)) {
                        $upload->setDestination(realpath(APPLICATION_PATH . '/../public/adjuntos'));

                        $adjunto = new Doctrine_Model_Entities_Adjunto();
                        $adjunto->setPersona($cliente);
                        $adjunto->setFecha(new DateTime());

                        $ext = $this->_findexts($info['name']);
                        $fileName = 'file' . $i . time() . '.' . $ext;

                        try {

                            // $upload->addFilter('Rename', array('target' => $dirUpload . $fileName));
                            $upload->addFilter(new Zend_Filter_File_Rename(array('target' => $fileName, 'overwrite' => true)), null, $file);
                            $adjunto->setPath($fileName);


                            $adjunto->setTipoAdjunto($this->referenciaDao->obtenerPorId("Doctrine_Model_Entities_TipoAdjunto", $tipo_adjuntos[$i]));

                            $cliente->agregarAdjunto($adjunto);

                            if (!$upload->receive($file)) {
                                echo "probleas";
                                exit;
                            }
                        } catch (Exception $e) {
                            $logger = Zend_Registry::get('logger');
                            echo("Error Codigo: " . $e->getMessage() );
                            exit;
                        }
                    } else {
                        //var_dump($upload->getMessages());
                    }
                    $i++;
                }
                //Zend_Debug::dump($upload->getFileInfo());
                //$upload->receive();
                //Zend_Debug::dump($upload->getFileInfo());

                if ($cliente->getDireccion()) {
                    $direcionCliente = $cliente->getDireccion();
                } else {
                    $direcionCliente = new Doctrine_Model_Entities_Direccion();
                }

                $direcionCliente->setDireccion($datos['direccion']);
                $direcionCliente->setNumero($datos['direccion_nro']);
                $direcionCliente->setCodigoPostal($datos['codigo_postal']);
                $direcionCliente->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_id']));
                $cliente->setDireccion($direcionCliente);

                $numerosDeTelefonos = $datos['telefono_personal'];
                $tiposDeTelefonos = $datos['tipo_telefono_personal'];
                //Esto es una solucion por al eliminar telefonos, mucha de la logica del forech no es necesaria
                $cliente->setTelefonos(new ArrayCollection());

                foreach ($numerosDeTelefonos as $key => $value) {
                    $telefono = new Doctrine_Model_Entities_Telefono();
                    $tipoTelefono = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoTelefono', $tiposDeTelefonos[$key]);
                    $telefono->setNumero($value);
                    $telefono->setTipoTelefono($tipoTelefono);
                    $cliente->agregarTelefono($telefono);
                }

                if (!empty($datos['legajo_1']) && !empty($datos['empresa_1'])) {
                    if (empty($datos['cliente_datos_laboral_1'])) {
                        $datosLaboral = new Doctrine_Model_Entities_DatosLaboral();
                    } else {
                        $datosLaboral = $cliente->obtenerDatoLaboralPorId($datos['cliente_datos_laboral_1']);
                    }

                    $datosLaboral->setLegajo($datos['legajo_1']);
                    $datosLaboral->setEmpresa($datos['empresa_1']);
                    $datosLaboral->setLugarDeTrabajo($datos['lugar_trabajo_1']);
                    $datosLaboral->setCargo($datos['cargo_1']);
                    $datosLaboral->setObservacion($datos['observacion_laboral_1']);
                    $datosLaboral->setTipoLaboral($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoLaboral', $datos['tipo_laboral_id_1']));
                    $datosLaboral->setFechaIngreso(Doctrine_Model_Utilidad::formatoFechaBD($datos['fecha_ingreso_1']));

                    if (!empty($datos['direccion_laboral_1'])) {
                        if (!$datosLaboral->getDireccion()) {
                            $direcionLaboral = new Doctrine_Model_Entities_Direccion();
                        } else {
                            $direcionLaboral = $datosLaboral->getDireccion();
                        }

                        $direcionLaboral->setDireccion($datos['direccion_laboral_1']);
                        $direcionLaboral->setNumero($datos['direccion_nro_1']);
                        $direcionLaboral->setCodigoPostal($datos['codigo_postal_laboral_1']);
                        $direcionLaboral->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_laboral_1']));
                        $datosLaboral->setDireccion($direcionLaboral);
                    }

                    if (!empty($datos['direccion_lugar_trabajo_laboral_1'])) {
                        if (!$datosLaboral->getDireccionLugarDeTrabajo()) {
                            $direcionLugarDeTrabajo = new Doctrine_Model_Entities_Direccion();
                        } else {
                            $direcionLugarDeTrabajo = $datosLaboral->getDireccionLugarDeTrabajo();
                        }

                        $direcionLugarDeTrabajo->setDireccion($datos['direccion_lugar_trabajo_laboral_1']);
                        $direcionLugarDeTrabajo->setNumero($datos['numero_lugar_trabajo_1']);
                        $direcionLugarDeTrabajo->setCodigoPostal($datos['codigo_postal_lugar_trabajo_laboral_1']);
                        $direcionLugarDeTrabajo->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_lugar_trabajo_laboral_1']));
                        $datosLaboral->setDireccionLugarDeTrabajo($direcionLugarDeTrabajo);
                    }

                    $numerosDeTelefonos = $datos['telefono_cliente_laboral_1'];
                    $tiposDeTelefonos = $datos['tipo_telefono_cliente_laboral_1'];
                    $datosLaboral->setTelefonos(new ArrayCollection());
                    foreach ($numerosDeTelefonos as $key => $value) {
                        if ($datosLaboral->existeUnTelefonoCon($tiposDeTelefonos[$key], $value)) {
                            $telefono = $datosLaboral->obtenerTelefono($tiposDeTelefonos[$key], $value);
                        } else {
                            $telefono = new Doctrine_Model_Entities_TelefonoLaboral();
                        }

                        $tipoTelefono = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoTelefono', $tiposDeTelefonos[$key]);
                        $telefono->setNumero($value);
                        $telefono->setTipoTelefono($tipoTelefono);
                        $datosLaboral->agregarTelefono($telefono);
                    }
                    $cliente->agregarDatosLaborales($datosLaboral);
                }


                if (!empty($datos['legajo_2']) && !empty($datos['empresa_2'])) {
                    if (empty($datos['cliente_datos_laboral_2'])) {
                        $datosLaboral = new Doctrine_Model_Entities_DatosLaboral();
                    } else {
                        $datosLaboral = $cliente->obtenerDatoLaboralPorId($datos['cliente_datos_laboral_2']);
                    }

                    $datosLaboral->setLegajo($datos['legajo_2']);
                    $datosLaboral->setCargo($datos['cargo_2']);
                    $datosLaboral->setLugarDeTrabajo($datos['lugar_trabajo_2']);
                    $datosLaboral->setEmpresa($datos['empresa_2']);
                    $datosLaboral->setObservacion($datos['observacion_laboral_2']);
                    $datosLaboral->setTipoLaboral($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoLaboral', $datos['tipo_laboral_id_2']));
                    $datosLaboral->setFechaIngreso(Doctrine_Model_Utilidad::formatoFechaBD($datos['fecha_ingreso_2']));

                    if (!empty($datos['direccion_laboral_2'])) {
                        if (!$datosLaboral->getDireccion()) {
                            $direcionLaboral = new Doctrine_Model_Entities_Direccion();
                        } else {
                            $direcionLaboral = $datosLaboral->getDireccion();
                        }

                        $direcionLaboral->setDireccion($datos['direccion_laboral_2']);
                        $direcionLaboral->setNumero($datos['direccion_nro_2']);
                        $direcionLaboral->setCodigoPostal($datos['codigo_postal_laboral_2']);
                        $direcionLaboral->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_id_laboral_2']));
                        $datosLaboral->setDireccion($direcionLaboral);
                    }

                    if (!empty($datos['lugar_trabajo_2'])) {
                        if (!$datosLaboral->getDireccionLugarDeTrabajo()) {
                            $direcionLugarDeTrabajo = new Doctrine_Model_Entities_Direccion();
                        } else {
                            $direcionLugarDeTrabajo = $datosLaboral->getDireccionLugarDeTrabajo();
                        }

                        $direcionLugarDeTrabajo->setDireccion($datos['direccion_lugar_trabajo_laboral_2']);
                        $direcionLugarDeTrabajo->setNumero($datos['numero_lugar_trabajo_laboral_2']);
                        $direcionLugarDeTrabajo->setCodigoPostal($datos['codigo_postal_lugar_trabajo_laboral_2']);
                        $direcionLugarDeTrabajo->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_lugar_trabajo_laboral_2']));
                        $datosLaboral->setDireccionLugarDeTrabajo($direcionLugarDeTrabajo);
                    }

                    $numerosDeTelefonos = $datos['telefono_cliente_laboral_2'];
                    $tiposDeTelefonos = $datos['tipo_telefono_cliente_laboral_2'];
                    $datosLaboral->setTelefonos(new ArrayCollection());
                    foreach ($numerosDeTelefonos as $key => $value) {
                        if ($datosLaboral->existeUnTelefonoCon($tiposDeTelefonos[$key], $value)) {
                            $telefono = $datosLaboral->obtenerTelefono($tiposDeTelefonos[$key], $value);
                        } else {
                            $telefono = new Doctrine_Model_Entities_TelefonoLaboral();
                        }

                        $tipoTelefono = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoTelefono', $tiposDeTelefonos[$key]);
                        $telefono->setNumero($value);
                        $telefono->setTipoTelefono($tipoTelefono);
                        $datosLaboral->agregarTelefono($telefono);
                    }
                    $cliente->agregarDatosLaborales($datosLaboral);
                }

                if ($this->personaDao->guardar($cliente)) {

                    /* informes cliente */
                    if (count($datos["comentario"]) > 0) {
                        $cont = 0;
                        foreach ($datos["comentario"] as $comentario) {

                            $informe = new Doctrine_Model_Entities_Informe();
                            $informe->setComentario($comentario);
                            $informe->setFecha(new DateTime($datos['fecha_carga_informe'][$cont]));

                            $tipoInforme = $this->referenciaDao->obtenerPorId("Doctrine_Model_Entities_TipoInforme", $datos["tipo_informe_id"][$cont]);
                            $informe->setTipoInforme($tipoInforme);

                            $informe->setPersona($cliente);

                            if (!$this->informeDao->guardar($informe)) {
                                $this->view->mensaje = 'Hubo un error con con los informes.';
                            } else {
                                $this->view->mensaje = 'Se ha modificado con exito.';
                            }

                            $cont++;
                        }
                    } else {
                        $this->view->mensaje = 'Se ha modificado con exito.';
                    }
                } else {

                    $this->view->mensaje = 'Hubo problemas al intentar Modificar a la persona.';
                    //$this->_flashMessenger->addError('Error al intentar Registrar al Cliente');
                }

                $this->view->tiposCreditoParaSolicitar = $cliente->obtenerTiposDeCreditosParaSolicitar();
            }
            if ($cliente) {

                $this->view->adjuntos = $cliente->getAdjuntos();
                $this->view->tituloTipoAdjunto = "Todos";

                $this->view->informes = $this->informeDao->obtenerTodosPorPersona($cliente->getId());
                $this->view->tituloInforme = "Todos";

                $this->view->clienteArray = $cliente->toArray();
            }
        } else {

            if (!empty($datos['cliente_id'])) {
                $cliente = $this->personaDao->obtenerPorId($datos['cliente_id']);
            }
            if ($cliente) {

                $this->view->adjuntos = $cliente->getAdjuntos();
                $this->view->tituloTipoAdjunto = "Todos";

                $this->view->informes = $this->informeDao->obtenerTodosPorPersona($cliente->getId());
                $this->view->tituloInforme = "Todos";

                $this->view->clienteArray = $cliente->toArray();
            }
        }

        $this->render('registrar');
    }

    public function bajaAction(){
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);
        
        $ar_data = array("error" => 1, "mensaje" => "Error al intentar dar la baja.");
        if ($this->getRequest()->isPost()):
            $id = $this->getRequest()->getParam("id", null);
            $descripcion = $this->getRequest()->getParam("descripcion", null);
        
            $cliente = $this->personaDao->obtenerPorId($id);
            if ($cliente):
                if ($cliente->getBaja()):
                    $ar_data = array("error" => 0, "mensaje" => "La baja ha sido levantada.");
                    $cliente->setBaja(0);
                    $cliente->setDescripcionBaja(null);
                else:
                    $ar_data = array("error" => 0, "mensaje" => "Ha sido dado de baja.");
                    $cliente->setBaja(1);
                    $cliente->setDescripcionBaja($descripcion);
                endif;
                $this->personaDao->guardar($cliente);
            endif;
        endif;
        
        $data = json_encode($ar_data);
        $this->getResponse()->setHeader("Content-Type", "application/json;charset=UTF-8")->setBody($data);
    }
    
    public function advertenciaAction(){
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);
        
        $ar_data = array("error" => 1, "mensaje" => "Error al intentar poner en advertencia.");
        if ($this->getRequest()->isPost()):
            $id = $this->getRequest()->getParam("id", null);
        
            $cliente = $this->personaDao->obtenerPorId($id);
            if ($cliente):
                if ($cliente->getMora()):
                    $ar_data = array("error" => 0, "mensaje" => "La Advertencia ha sido levantada.");
                    $cliente->setMora(0);
                else:
                    $ar_data = array("error" => 0, "mensaje" => "Ha sido puesto en advertencia.");
                    $cliente->setMora(1);
                endif;
                $this->personaDao->guardar($cliente);
            endif;
        endif;
        
        $data = json_encode($ar_data);
        $this->getResponse()->setHeader("Content-Type", "application/json;charset=UTF-8")->setBody($data);
    }
    
    public function eliminarAction() {
        $cliente_id = $this->getRequest()->getParam("cliente_id", 0);

        if ($this->getRequest()->isPost()) {
            if ($cliente_id > 0 && $cliente_id != "") {
                $unCliente = new Doctrine_Model_Entities_Persona();
                $unCliente = $this->personaDao->obtenerPorId($cliente_id);

                $unCliente->setEliminado(1);

                if (count($unCliente->getCreditos()) == 0) {
                    if ($this->personaDao->guardar($unCliente)) {
                        $this->_helper->redirector("registrar", "cliente", "usuarios", array("mensaje" => "Borrado Exitoso", "error" => false));
                    } else {
                        $this->_helper->redirector("registrar", "cliente", "usuarios", array("mensaje" => "Error al intentar borrado de cliente.", "error" => true));
                    }
                } else {
                    $this->_helper->redirector("registrar", "cliente", "usuarios", array("mensaje" => "No puede hacerse el borrado al cliente; tiene creditos obtenidos en su historial.", "error" => true));
                }
            } else {
                $this->_helper->redirector("registrar", "cliente", "usuarios", array("mensaje" => "Es necesario seleccionar un cliente para esta opción.", "error" => true));
            }
        } else {
            $this->_helper->redirector("registrar", "cliente", "usuarios");
        }
    }

    public function cambiartemaAction() {

        $this->_helper->viewRenderer->setNoRender(TRUE);
        $accion = $this->getRequest()->getParam('accion_origen');
        $controlador = $this->getRequest()->getParam('controlador_origen');
        if (isset($this->_session->tema)) {

            $this->_session->unsetAll();
        } else {
            $this->_session->tema = 1;
        }

        $this->_helper->redirector($accion, $controlador);
    }

    public function idclientbydniAction(){
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);

        $datos = $this->getRequest()->getParams();

        $numeroDeDocumento = $datos['nro_documento'];
        $tipoDocumentoId = $datos['tipo_documento_id'];
        
        $unCliente = $this->personaDao->obtenerPorNumeroyTipoDeDocumento($numeroDeDocumento, $tipoDocumentoId);
        if ($unCliente):
            $data = json_encode(array("id" => $unCliente->getId()));
        else :
            $data = json_encode(array("id" => 0));
        endif;
        $this->getResponse()->setHeader("Content-Type", "application/json;charset=UTF-8")->setBody($data);
    }
    
    public function buscarpordocumentojsonAction() {
        
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);

        $datos = $this->getRequest()->getParams();

        $numeroDeDocumento = $datos['nro_documento'];
        $tipoDocumentoId = $datos['tipo_documento_id'];

        if (!$numeroDeDocumento) {
            return null;
        }

        $unCliente = $this->personaDao->obtenerPorNumeroyTipoDeDocumento($numeroDeDocumento, $tipoDocumentoId);

        if ($unCliente) {
            $cant_creditos_como_cliente = 0;
            $cant_creditos_como_garante = 0;
            $mora = false;

            $conjCreditos = $this->creditoDao->obtenerTodosPorPersonaOrdenadoPorEstado($unCliente->getId());
            $credito = new Doctrine_Model_Entities_Credito();
            foreach ($conjCreditos as $credito) {

                if (!$credito->estoyAlDia()) {
                    $mora = true;
                }

                if ($credito->getCliente()->getId() == $unCliente->getId()) {
                    $cant_creditos_como_cliente++;
                } else {
                    $cant_creditos_como_garante++;
                }
            }

            $mensaje = "";
            if ($mora) {
                $tagopen = "<div class='alert alert-error' >";
                $mensaje .= "  <b>Persona en Mora.</b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ";
            } else {
                $tagopen = "<div class='alert alert-info' >";
            }

            if ($cant_creditos_como_cliente > 0)
                $mensaje .= "  Esta persona tiene {$cant_creditos_como_cliente} creditos.  ";

            if ($cant_creditos_como_garante > 0)
                $mensaje .= "  Esta persona es garante de {$cant_creditos_como_garante} creditos.  ";

            $tagclose = "</div>";

            if ($mensaje != "")
                $unCliente->setMensaje($tagopen . $mensaje . $tagclose);
            $a = $unCliente->toArray();

            $t = json_encode($a);
            
            //header('Content-Type: text/html; charset=ISO-8859-1');
            //echo $t;
            $this->getResponse()->setHeader("Content-Type", "application/json;charset=UTF-8")->setBody($t);
        }
    }

    public function pdfAction() {
        // Create new PDF 
        $pdf = new Zend_Pdf();

        // Add new page to the document 
        $page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
        $pdf->pages[] = $page;

        // Get PDF document as a string 
        $pdfData = $pdf->render();

        header("Content-Disposition: inline; filename=result.pdf");
        header("Content-type: application/x-pdf");
        echo $pdfData;
    }

    public function excelAction() {
        $this->_helper->_layout->disableLayout();

        $personaDao = new Doctrine_Model_PersonaDao();
        $todosLosClientes = $personaDao->obtenerTodos();

        $this->view->clientes = $todosLosClientes;
    }

    public function eliminaradjuntoAction() {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();

        $id_adjunto = $this->getRequest()->getParam("id_adjunto", null);

        $eliminado = false;
        if ($this->getRequest()->isPost() && !is_null($id_adjunto)) {
            $adjunto = $this->adjuntosDao->obtenerPorId($id_adjunto);
            if ($this->adjuntosDao->eliminar($adjunto)) {
                $eliminado = true;
            }
        }

        echo json_encode(array("eliminado" => $eliminado));
    }

    function cargarAdjuntos($persona) {
        $datos = $this->getRequest()->getParams();
        if ($this->getRequest()->isPost()) {


            $adapter = new Zend_File_Transfer_Adapter_Http();
            $dirUpload = $this->fullPath . $this->pathUpload;

            $adapter->setDestination($dirUpload);


            $i = 0;

            foreach ($adapter->getFileInfo() as $info) {

                $tipoAdjunto = Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_TipoAdjunto', $datos['tipo_adjunto1'][$i]);

                $adjunto = new Doctrine_Model_Entities_Adjunto();
                $adjunto->setTipoAdjunto($tipoAdjunto);


                $ext = $this->_findexts($info['name']);

                $fileName = 'file' . $i . time() . '.' . $ext;

                $i++;


                $adapter->addFilter('Rename', array('target' => $dirUpload . $fileName,
                    'overwrite' => true));

                $adjunto->setPath($fileName);
                $adjunto->setPersona($persona);


                if (!$adapter->receive($info)) {
                    echo $fileName . "<br>";
                    var_dump($adapter->getMessages());
                    $this->_flashMessenger->addError($adapter->getMessages());
                }

                var_dump($info);

                if ($this->adjuntosDao->guardar($adjunto)) {
                    
                } else {
                    
                }
            }
        }
    }

    protected function _findexts($filename) {

        $filename = strtolower($filename);

        $exts = split("[/\\.]", $filename);


        $n = count($exts) - 1;


        $exts = $exts[$n];


        return $exts;
    }

    public function mostrartiposdecreitosposiblesAction() {
        $this->_helper->_layout->disableLayout();

        $personaDao = new Doctrine_Model_PersonaDao();
        $cliente_id = $this->getRequest()->getParam('cliente_id', null);
        if ($cliente_id) {
            $cliente = $personaDao->obtenerPorId($cliente_id);
        }
        if ($cliente) {
            $this->view->tiposDeCreditosPosibles = $cliente->obtenerTiposDeCreditosParaSolicitar();
        }
    }

    protected function cargarDatosCliente($cliente, $datos) {
        $cliente->setTipoDocumento($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoDocumento', $datos['tipo_documento_id']));
        $cliente->setNroDocumento($datos['nro_documento']);
        $cliente->setCuit($datos['cuit']);
        $cliente->setCuit1($datos['cuit1']);
        $cliente->setApellido($datos['apellido']);
        $cliente->setNombres($datos['nombres']);
        $cliente->setSexo($datos['sexo']);
        $cliente->setFechaNacimiento(Doctrine_Model_Utilidad::formatoFechaBD($datos['fecha_nacimiento']));
        $cliente->setEstadoCivil($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_EstadoCivil', $datos['estado_civil']));
        $cliente->setNacionalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Nacionalidad', $datos['nacionalidad_id']));
        $cliente->setMail($datos['mail']);
        //$cliente->setPublicidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Publicidad', $datos['publicidad_id']));
        $cliente->setObservaciones($datos['observacion']);
        $cliente->setCalificacion($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Calificacion', $datos['calificacion_id']));
        $mora = isset($datos['mora']) && $datos['mora'] == 1 ? 1 : 0;
        $cliente->setMora($mora);
        return $cliente;
    }

    protected function cargarDatosGarante($garante, $datos) {
        $garante->setTipoDocumento($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoDocumento', $datos['garante_tipo_documento_id']));
        $garante->setNroDocumento($datos['garante_nro_documento']);
        $garante->setCuit($datos['garante_cuit']);
        $garante->setCuit1($datos['garante_cuit1']);
        $garante->setApellido($datos['garante_apellido']);
        $garante->setNombres($datos['garante_nombres']);
        $garante->setSexo($datos['garante_sexo']);
        $garante->setFechaNacimiento(Doctrine_Model_Utilidad::formatoFechaBD($datos['garante_fecha_nacimiento']));
        $garante->setEstadoCivil($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_EstadoCivil', $datos['garante_estado_civil']));
        $garante->setNacionalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Nacionalidad', $datos['garante_nacionalidad_id']));
        $garante->setMail($datos['garante_mail']);
        $garante->setObservaciones($datos['garante_observacion']);
        $garante->setCalificacion($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Calificacion', $datos['garante_calificacion_id']));
        return $garante;
    }

    public function calificacionesAction() {
        $this->_helper->layout()->setLayout("layout_pagos");

        $this->view->tiposInformes = $this->referenciaDao->obternerTiposInformesVisibles();

        $this->view->colorContenido = '#6ea57e';
        $this->view->margin_top = "<br/><br/>";

        $this->view->cliente_id = $this->getRequest()->getParam("cliente_id");

        $this->render("registrar-calificacion");
    }

}
